.TITLE TTDAT .IDENT /06.11/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; ; 27-JAN-78 PETER WANNHEDEN ; ; PREVIOUSLY MODIFIED BY: ; ; P. WANNHEDEN ; C. F. SPITZ ; D. R. DONCHIN ; T. LEKAS ; J. KAUFFMAN ; S. C. ADAMS ; C. B. PETROVIC ; R. S. PHILPOTT ; T. LEKAS ; B. S. MCCARTHY ; L. B. MCCULLEY ; L. M. KOGAN ; ; MODIFICATIONS: ; ; ; L. KOGAN 02-DEC-85 06.01 ; LK706 -- CORRECT SPEED FOR 134.5 BAUD IN ABLOW FOR DH11 ; ; S. C. ADAMS 6-NOV-85 6.02 ; SA452 -- ADD SUPPORT FOR USER-WRITTEN PORT DRIVER ; ; L. KOGAN 18-JUN-86 6.03 ; LK710 -- INCLUDE 7-BIT CHARACTER LENGTH SUPPORT ; ; S. R. CLOUTIER 20-JUN-86 6.04 ; ADD $LHGTD (LH GET TRANSMIT DATA) ENTRY TO TABLE ; ; S. C. ADAMS 6-AUG-86 6.05 ; SA464 -- ADD SUPPORT FOR LAT APPLICATION TERMINALS ; ; S. R. CLOUTIER 7-AUG-86 6.06 ; ADD $LHTMO TIME-OUT ENTRY TO TABLE ; ; R. D. HANEY 13-AUG-86 6.07 ; RDH073 - ADD SUPPORT FOR LA75 ; ; S. R. CLOUTIER 12-SEPT-1986 6.08 ; SRC CORRECT PPORG AND PPEIO IN PPDSP (PHEW!) ; ; R. D. HANEY 19-SEP-86 06.10 ; RDH087 ADD SUPPORT FOR LA2XX SERIES ; ; S. R. CLOUTIER 27-OCT-86 06.11 ; SRC FIX QPDSP FOR IO.ORG ; ; ;+ ; THIS MODULE CONTAINS ALL DRIVER DATA, EXCEPT THE DRIVER DISPATCH TABLE. ; IT ALSO CONTAINS THE DRIVER INITIALIZATION ROUTINE. ; ; IN A SYSTEM THAT SUPPORTS SEPARATE KERNEL DATA SPACE MAPPING, ; THIS MODULE MUST BE BUILT INTO THE TASK IMAGE "TTCOM". ;- ; ; .MCALL FILIO$, SPCIO$, TTSYM$ ; FILIO$ ;DEFINE I/O FUNCTION CODES SPCIO$ TTSYM$ .IF DF T$$OVL .MCALL PCBDF$ PCBDF$ .ENDC ;T$$OVL .IF NDF R$$MPL .MCALL HWDDF$ HWDDF$ ;DEFINE KINAR5 .ENDC ;NDF R$$MPL ; ; ; MACRO TO GENERATE CHARACTER RECOGNITION TABLE AND CORRESPONDING ; DISPATCH TABLE. ; .MACRO CREC PREFIX,CHAR .IRP X, .PSECT CHRT .IIF NDF CHRT CHRT==. .IIF NDF 'PREFIX'CRT 'PREFIX'CRT==. .BYTE CH.'X' .PSECT CHRD .IIF NDF CHRD CHRD==. .WORD 'PREFIX''X' .ENDR .PSECT MAP5 .ENDM CREC ; CH.DEF = 0 ;DEFINE "DEFAULT" CHARACTER ;FOR CHARACTER DISPATCHING ; ; CHARACTER RECOGNITION TABLES. ; EACH TABLE SHOULD BE ORDERED IN DESCENDING FREQUENCY OF ; OCCURRENCE FOR MAXIMUM PERFORMANCE. ; ; CHARACTERS THAT HAVE SPECIAL SIGNIFICANCE BEFORE ; STORING IN TYPE-AHEAD BUFFER - USED BY ICHAR1. ; NOTE - ICHAR1 RECOGNIZES CTRL-X SEPARATELY. ; ALL ENTRIES IN THE TABLE MUST BE NUMERICALLY SMALLER ; OR EQUAL TO CTRL-X (30). ; .PSECT MAP5 ; .EVEN I1CRT:: .BYTE CH.CTS, CH.CTQ, CH.CTO .IIF DF T$$CTX, .BYTE CH.CTX .BYTE CH.CTC ASXOFF==I1CRT ;THIS LABEL MUST POINT TO AN XOFF ;CHARACTER (CTRL-S) ASXON==I1CRT+1 ;THIS LABEL MUST POINT TO AN XON ;CHARACTER (CTRL-Q) ; ; ; CHARACTERS THAT HAVE SPECIAL SIGNIFICANCE AFTER ; RETRIEVAL FROM TYPE-AHEAD BUFFER (OR WHEN BUFFER BYPASSED) ; USED BY ICHAR2. NOTE - ESCAPE AND RUBOUT ARE RECOGNIZED SEPARATELY ; BY ICHAR2. ALL ENTRIES IN THE TABLE MUST BE NUMERICALLY ; SMALLER THAN ESCAPE (33). ; CREC I2, .IIF DF T$$CTX, CREC I2, CREC I2, ; ; .IIF DF T$$CTR, CREC ED, CREC ED, ; ; ; CHARACTERS THAT HAVE TO BE EXPANDED ON OUTPUT - USED BY EXPCHR. ; CARRIAGE-RETURN IS RECOGNIZED SEPARATELY BY EXPCHR. ; ALL ENTRIES IN THE TABLE MUST BE SMALLER THAN CARRIAGE-RETURN (15). ; CREC EX, ; ; CHARACTERS THAT HAVE NON-STANDARD ECHO FORMATS AS TERMINATORS ; CREC EK, ; ; ; RECOGNITION TABLE FOR VERTICAL FORMAT CONTROL BYTES. ; NOTE - THIS TABLE USES -1 AS TABLE TERMINATOR. ; ; THE WORD IN TABLE CHRD IS ENCODED AS FOLLOWS: ; ; LOW BYTE DESCRIBES LEADING LF'S OR FF: ; 0 = NO LEADING CHARACTERS ; CH.FF = LEADING FF ; -N = N LEADING LF'S ; ; HIGH BYTE DESCRIBES TRAILING CR: ; 0 = NO TRAILING CR ; S2.CR = TRAILING CR ; ; DEFINE SYMBOLS FOR ENCODED VALUES ; .IIF LE S2.CR-200 .ERROR ;S2.CR MUST BE IN HIGH BYTE VFNUL = 0 ;NULL - NOTHING VFZER = 376!S2.CR ;0 - 2 LF'S, 1 CR VFONE = CH.FF!S2.CR ;1 - 1 FF, 1 CR VFPLU = S2.CR ;+ - NO LF OR FF, 1 CR VFDOL = 377 ;$ - 1 LF, NO CR VFDF = 377!S2.CR ;DEFAULT - 1 LF, 1 CR ; ; ; DEFINE THE TABLE TERMINATOR ; CH.DF = -1 ; CREC VF, ; ; ; SPECIAL ECHO STRINGS ; ASHT:: .BYTE CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP ;8 SPACES - USED TO SIMULATE HOR. TAB .IF DF T$$CTR ASCTR:: .ASCII /^R/ ;CTRL-R .ENDC ASCTU:: .ASCII /^U/ ;CTRL-U .IF NDF R$$MPL&A$$CLI ASCLP:: .BYTE 12,'> ;ABBREVIATED CLI PROMPT ASCLI:: .ASCII <12>/MCR>/ ;FULL CLI PROMPT .ENDC ;NDF R$$MPL&A$$CLI .IF DF T$$SPC ASCLC:: .BYTE 15,12 ;CLI CONTINUATION PROMPT .ASCII /->/ ; .ENDC ;T$$SPC ; ; DON'T SEPARATE THE LINES BELOW! ; ASCTZ::.ASCII /^Z/ ;CTRL-Z ASCR:: .BYTE CH.CR,0,0,0,0,0,0,0,0,0,0 ;CARRIAGE RETURN PLUS UP TO 10 FILLERS ;(WORST CASE FOR LA30S) ; ; DON'T SEPARATE THE LINES ABOVE! ; ASBELL::.BYTE 7 ;BELL ASBSL:: .ASCII "\" ;BACKSLASH .IF DF T$$RUB ASRBS:: .BYTE CH.BSP,CH.SP,CH.BSP ;BACKSPACE-SPACE-BACKSPACE ;(FOR SCOPE RUBOUT) ASBSP:: .BYTE CH.BSP,CH.BSP,CH.BSP,CH.BSP ;8 BACKSPACES .BYTE CH.BSP,CH.BSP,CH.BSP,CH.BSP ;TO RUBOUT HTAB ON SCOPE .ENDC ; NLFF==4 ;NUMBER OF VERTICAL FILL CHARACTERS .REPT 4 ;OUTPUT 4 LF'S IN PLACE OF FF AND VT .BYTE CH.LF ;FOR SCOPES .REPT NLFF ;INSERT VERTICAL FILL IF NECESSARY .BYTE 0 .ENDR .ENDR .REPT 4 ;OUTPUT 4 LF'S IN PLACE OF FF AND VT .BYTE CH.LF ;FOR SCOPES .ENDR ASLF:: .BYTE CH.LF ;LINE FEED .REPT NLFF .BYTE 0 ;FILLERS .ENDR ; ; .IF DF T$$ESC ; SYNTAX RULE TABLE FOR ESCAPE SEQUENCES ; .ENABL LSB .BYTE 'P,'P,40$-ESCST ;P - NEXT = 40$ (VT61 EXCEPTION) .BYTE 'Y,'Y,30$-ESCST ;Y - NEXT = 30$ (VT61 EXCEPTION) ESCST:: .BYTE '?,'?,40$-ESCST ;? - NEXT = 40$ (OLDER TERM. EXCEPTION) .BYTE 'O,'O,40$-ESCST ;O - NEXT = 40$ (ANSI SS3 INTRODUCER) .BYTE '[,'[,20$-ESCST ;[ - NEXT = 20$ (ANSI CSI) 10$: .BYTE 40,57,10$-ESCST ;INTERMEDIATE CHAR. - NEXT = SAME (10$) .BYTE 60,176,0 ;FINAL CHARACTER - DONE 20$: .BYTE 40,77,20$-ESCST ;INTERMEDIATE CHAR. - NEXT = SAME (20$) .BYTE 100,176,0 ;FINAL CHARACTER - DONE 30$: .BYTE 40,176,40$-ESCST ;FIRST COORD. (BIAS 40) - NEXT = 40$ 40$: .BYTE 60,71,20$-ESCST ; .BYTE 40,176,0 ; .DSABL LSB .ENDC ; ; TABLE OF HORIZONTAL FILL REQUIREMENT FOR LA30S. ; INDEX = CURRENT HORIZONTAL POSITION DIVIDED BY 8. ; ; NUMBER OF FILL CHAR.S HOR.POS. HORFT:: .BYTE 4. ;0-7. .BYTE 8. ;8.-15. .BYTE 6. ;16.-23. .BYTE 3. ;24.-31. .BYTE 0. ;32.-39. .BYTE 2. ;40.-47. .BYTE 4. ;48.-55. .BYTE 6. ;56.-63. .BYTE 8. ;64.-71. .BYTE 10. ;72. AND UP ; ; .IIF DF T$$ONI, .PSECT MAP6 .IF DF D$$M11&R$$MPL&T$$ONI YMC12:: .BLKW 1 ;POINTER TO $YMCTB .ENDC ;D$$M11&R$$MPL&T$$ONI .IF DF T$$GMC!T$$SMC!D$$M11!D$$Z11!D$$V11 SPHI == S.38.4 ;HIGHEST RECOGNIZED SPEED CODE .IF DF D$$H11 ; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DH11. ; THE TABLE IS INDEXED BY S.XXX-1, WHERE S.XXX IS THE SYMBOLIC ; NAME FOR THE DESIRED SPEED (DEFINED BY TTSYM$). ; EACH ENTRY IS A BYTE CONTAINING THE PARAMETER TO LOAD INTO ; THE LINE PARAMETER REGISTER FOR SPEED S.XXX. ; IF S.XXX IS UNSUPPORTED, THE BYTE CONTAINS A NEGATIVE VALUE. ; SPDH:: .BYTE 0 ;S.0 .BYTE 1 ;S.50 .BYTE 2 ;S.75 .BYTE -1 ;S.100 - UNSUPPORTED .BYTE 3 ;S.110 .BYTE 4 ;S.134 .BYTE 5 ;S.150 .BYTE 6 ;S.200 .BYTE 7 ;S.300 .BYTE 10 ;S.600 .BYTE 11 ;S.1200 .BYTE 12 ;S.1800 .BYTE -1 ;S.2000 - UNSUPPORTED .BYTE 13 ;S.2400 .BYTE -1 ;S.3600 - UNSUPPORTED .BYTE 14 ;S.4800 .BYTE -1 ;S.7200 - UNSUPPORTED .BYTE 15 ;S.9600 .BYTE 16 ;S.EXTA .BYTE 17 ;S.EXTB .BYTE -1 ;S.19.2 - UNSUPPORTED .BYTE -1 ;S.38.4 - UNSUPPORTED .ENDC ;D$$H11 .IF DF D$$Z11 ; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DZ11. ; THE TABLE FORMAT IS IDENTICAL TO THAT OF THE DH11 TABLE ; DESCRIBED ABOVE. ; SPDZ:: .BYTE -1 ;S.0 - UNSUPPORTED .BYTE 0 ;S.50 .BYTE 1 ;S.75 .BYTE -1 ;S.100 - UNSUPPORTED .BYTE 2 ;S.110 .BYTE 3 ;S.134 .BYTE 4 ;S.150 .BYTE -1 ;S.200 - UNSUPPORTED .BYTE 5 ;S.300 .BYTE 6 ;S.600 .BYTE 7 ;S.1200 .BYTE 10 ;S.1800 .BYTE 11 ;S.2000 .BYTE 12 ;S.2400 .BYTE 13 ;S.3600 .BYTE 14 ;S.4800 .BYTE 15 ;S.7200 .BYTE 16 ;S.9600 .BYTE -1 ;S.EXTA - UNSUPPORTED .BYTE -1 ;S.EXTB - UNSUPPORTED .BYTE -1 ;S.19.2 - UNSUPPORTED .BYTE -1 ;S.38.4 - UNSUPPORTED .ENDC ;D$$Z11 .IF DF D$$V11 ; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DHV11. ; THE TABLE FORMAT IS IDENTICAL TO THAT OF THE DH11 TABLE ; DESCRIBED ABOVE. ; SPDHV:: .BYTE -1 ;S.0 - UNSUPPORTED .BYTE -1 ;S.50 - UNSUPPORTED .BYTE 1 ;S.75 .BYTE -1 ;S.100 - UNSUPPORTED .BYTE 2 ;S.110 .BYTE 3 ;S.134 .BYTE 4 ;S.150 .BYTE -1 ;S.200 - UNSUPPORTED .BYTE 5 ;S.300 .BYTE 6 ;S.600 .BYTE 7 ;S.1200 .BYTE 10 ;S.1800 .BYTE 11 ;S.2000 .BYTE 12 ;S.2400 .BYTE -1 ;S.3600 - UNSUPPORTED .BYTE 13 ;S.4800 .BYTE -1 ;S.7200 - UNSUPPORTED .BYTE 15 ;S.9600 .BYTE -1 ;S.EXTA - UNSUPPORTED .BYTE -1 ;S.EXTB - UNSUPPORTED .BYTE 16 ;S.19.2 .BYTE -1 ;S.38.4 - UNSUPPORTED .ENDC ;D$$V11 .ENDC ;T$$GMC!T$$SMC!D$$M11!D$$Z11 .PSECT MAP5 .IF DF D$$M11!D$$ZMD!D$$VMD ; ; MATCH TABLES FOR AUTO-BAUD SPEED DETECT. EACH ENTRY CONSISTS OF TWO BYTES, ; THE FIRST BYTE IS WHAT A CARRIAGE RETURN LOOKS LIKE WHEN WE ARE RECEIVING ; AT A KNOWN RATE AND THE CHARACTER WAS SENT AT THE BAUD SPEED SPECIFIED BY ; THE SECOND RATE. THERE ARE TWO TABLES, ONE FOR DETECTING SPEEDS BETWEEN ; 600 AND 9600 BAUD (WE SAMPLE AT 4800 BAUD), THE OTHER FOR DETECTING SPEEDS ; BETWEEN 50 AND 300 BAUD (WE SAMPLE AT 300 BAUD). ; ABHIGH::.BYTE 200,S.600 ;CH.CR AT 600 BAUD ON DH11 AND DZ11 .BYTE 170,S.1200 ;CH.CR AT 1200 BAUD ON DH11 AND DZ11 .BYTE 214,S.1800 ;CH.CR AT 1800 BAUD ON DH11 AND DZ11 .BYTE 346,S.2400 ;CH.CR AT 2400 BAUD ON DH11 AND DZ11 .BYTE 362,S.9600 ;CH.CR AT 9600 BAUD ON DH11 .BYTE 376,S.9600 ;CH.CR AT 9600 BAUD ON DZ11 .BYTE 0 ;ZERO TABLE TERMINATOR ; ABLOW:: .BYTE 340,S.50 ;CH.CR AT 50 BAUD ON DH11 AND DZ11 .BYTE 170,S.75 ;CH.CR AT 75 BAUD ON DH11 AND DZ11 .BYTE 214,S.110 ;CH.CR AT 110 BAUD ON DH11 AND DZ11 .BYTE 316,S.134 ;CH.CR AT 134.5 BAUD ON DH11 .BYTE 306,S.134 ;CH.CR AT 134.5 BAUD ON DZ11 .BYTE 346,S.150 ;CH.CR AT 150 BAUD ON DH11 AND DZ11 .BYTE 0 ;ZERO TABLE TERMINATOR .ENDC ;D$$M11!D$$ZMD!D$$VMD .IF DF T$$GMC!T$$SMC!T$$CUP ; ; ; TABLES OF IMPLICIT CHARACTERISTICS PER TERMINAL TYPE. ; EACH TABLE IS INDEXED WITH TERMINAL TYPE (TC.XXX) MINUS 1. ; HIGHEST INDEX = TTPHI. EACH ENTRY IS A BYTE, WITH MEANING ; DESCRIBED BELOW. ; ; TABLE BIT(-S) MEANING ; ------------------------------------------------------ ; TTYP1 0-5 TO BE COPIED DIRECTLY INTO THE HIGH BYTE ; OF STATUS WORD 2 (U.TSTA+2). ; 6-7 CURSOR POSITIONING COMMAND TYPE (RANGE 0-3). ; THIS VALUE IS USED AS INDEX INTO TABLE "CPOST" ; (SEE BELOW). ; TTYP2 0-7 PAGE WIDTH. ; TTYP3 0-6 PAGE LENGTH. ; 7 1 = SCOPE. ; TTYP4 0-5 TO BE COPIED DIRECTLY INTO THE HIGH BYTE ; OF STATUS WORD 4 (U.TSTA+6). ; ; ; MACRO TO GENERATE AN ENTRY IN THE TABLES TTYP1, TTYP2 AMD TTYP3. ; ; ; NOTE: DEFAULT OF HSY IS A NO-OP. STATUS BITS MUST BE REARRANGED FOR IT TO WORK ; .MACRO TERM TYPE,WID,LEN,HHT=0,HFF=0,HFL=0,VFL=0,SCP=0,CUP=0,HSY=0 .PSECT TTYP1 .IIF NDF TTYP1 TTYP1==. .=TTYP1+TYPE-1 X=!!! .BYTE X!HFL! .IF DF T$$GMC!T$$SMC .PSECT TTYP2 .IIF NDF TTYP2 TTYP2==. .=TTYP2+TYPE-1 .BYTE WID .PSECT TTYP3 .IIF NDF TTYP3 TTYP3==. .=TTYP3+TYPE-1 .BYTE !LEN .ENDC .PSECT MAP5 .ENDM TERM ; ; MACRO TO GENERATE AN ENTRY IN THE TABLE TTYP4. ; .MACRO ETERM TYPE,ANI=0,AVO=0,BLK=0,DEC=0,EDT=0,RGS=0,SFC=0 .PSECT TTYP4 .IIF NDF TTYP4 TTYP4==. .=TTYP4+TYPE-1 X=!!!! X=X!! .BYTE X/400 .PSECT MAP5 .ENDM ETERM ; TTPHI == T.L2XX ;HIGHEST TERMINAL TYPE WITH IMPLICIT ;CHARACTERISTICS ; TERM T.AS33 WID=72.,LEN=66.,HFL=1 TERM T.KS33 WID=72.,LEN=66.,HFL=1 TERM T.AS35 WID=72.,LEN=66.,HFL=1 TERM T.L30S WID=80.,LEN=66.,HFL=7 TERM T.L30P WID=80.,LEN=66. TERM T.LA36 WID=132.,LEN=66. TERM T.VT05 WID=72.,LEN=20.,HHT=1,VFL=1,SCP=1,CUP=1 TERM T.VT50 WID=80.,LEN=12.,HHT=1,SCP=1 TERM T.VT52 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2 TERM T.VT55 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2 TERM T.VT61 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2 TERM T.L180 WID=132.,LEN=66.,HFF=1 TERM T.V100 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.L120 WID=132.,LEN=66.,HFF=1 TERM T.LA12 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.L100 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.LA34 WID=132.,LEN=66.,HFF=1 TERM T.LA38 WID=132.,LEN=66.,HFF=1 TERM T.V101 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V102 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V105 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V125 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V131 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V132 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.LA50 WID=80.,LEN=66.,HHT=1,HFF=1 TERM T.LQP1 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.LQP2 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.BMP1 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.V2XX WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1 TERM T.LN03 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.DTC1 WID=132.,LEN=66. TERM T.L210 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.LQP3 WID=132.,LEN=66.,HHT=1,HFF=1 TERM T.LA75 WID=80.,LEN=66.,HHT=1,HFF=1 TERM T.L2XX WID=80.,LEN=66.,HHT=1,HFF=1 ETERM T.V100 ANI=1,DEC=1,AVO=1 ETERM T.V101 ANI=1,DEC=1 ETERM T.V102 ANI=1,DEC=1,AVO=1,EDT=1 ETERM T.V105 ANI=1,DEC=1 ETERM T.V125 ANI=1,DEC=1,AVO=1,RGS=1 ETERM T.V131 ANI=1,DEC=1,AVO=1,EDT=1,BLK=1 ETERM T.V132 ANI=1,DEC=1,AVO=1,EDT=1,BLK=1 ETERM T.BMP1 ANI=1,DEC=1,AVO=1,EDT=1 ETERM T.V2XX ANI=1,DEC=1,AVO=1,EDT=1,SFC=1 .ENDC ;T$$GMC!T$$SMC!T$$CUP ; .EVEN ; ; ; TABLE OF POINTERS TO DISPATCH TABLES IN CONTROLLER-DEPENDENT ; MODULES. INDEX = CONTROLLER TYPE CODED AS FOLLOWS: ; 0 = DL-11 ; 2 = DZ-11 ; 4 = DH-11 ; 6 = DJ-11 ; 10 = DM-11BB ; 12 = CT VIDEO CONTROL TASK ; 14 = DHV-11 ; 16 = LAT Port ; 20 = USER PORT STUB ; .IIF DF R$$CON CTBL:: .IRP X, .IIF NDF R$$CON CTBL:: .IRP X, .IF IDN X,LH .IF DF T$$LTH .IIF NDF R$$CON .ERROR ;LAT Support requires R$$CON .IIF NDF T$$GMC .IIF NDF T$$SMC .ERROR ;LAT Support requires T$$GMC or T$$SMC .WORD $LHTBL .PSECT CTBL $LHTBL:.WORD LHSTAX ;START OUTPUT .WORD LHABOX ;ABORT OUTPUT .WORD LHRESX ;RESUME OUTPUT .WORD LHSTOX ;STOP OUTPUT .WORD LHMTIM ;MODEM TIMER .WORD LHCPUP ;CONTROLLER POWER-UP .WORD LHUPUP ;UNIT POWER-UP .WORD LHCONL ;CONTROLLER ONLINE .WORD LHCOFF ;CONTROLLER OFFLINE .WORD LHUONL ;UNIT ONLINE .WORD LHUOFF ;UNIT OFFLINE .WORD LHLPAR ;GET/SET LINE PARAMETERS .PSECT MAP5 .IFF ; L$$LTH .WORD 0 .ENDC ; L$$LTH .ENDC ; IDN X,LH .IF IDN X,US .IF DF T$$USP .IIF NDF R$$CON .ERROR ;USER SUPPLIED PORTS REQUIRES R$$CON .WORD $USTBL .PSECT CTBL $USTBL: .WORD USSTAX ;START OUTPUT .WORD USABOX ;ABORT OUTPUT .WORD USRESX ;RESUME OUTPUT .WORD USSTOX ;STOP OUTPUT .WORD USMTIM ;MODEM TIMER .WORD USCPUP ;CONTROLLER POWER-UP .WORD USUPUP ;UNIT POWER-UP .WORD USCONL ;CONTROLLER ONLINE .WORD USCOFF ;CONTROLLER OFFLINE .WORD USUONL ;UNIT ONLINE .WORD USUOFF ;UNIT OFFLINE .WORD USLPAR ;GET/SET LINE PARAMETERS .PSECT MAP5 .IFF ; T$$USP .WORD 0 .ENDC ; T$$USP .ENDC ; IDN X,US .IF DIF X,LH .IF DIF X,US .IF DF D$$'X'11 .WORD $Y'X'TBL .PSECT CTBL $Y'X'TBL:.WORD Y'X'STAX ;START OUTPUT .WORD Y'X'ABOX ;ABORT OUTPUT .WORD Y'X'RESX ;RESUME OUTPUT .WORD Y'X'STOX ;STOP OUTPUT .IF NDF R$$CON .WORD Y'X'PWUP ;POWER-UP .IFTF ;NDF R$$CON .WORD Y'X'MTIM ;MODEM TIMER .IFF ;NDF R$$CON .WORD Y'X'CPUP ;CONTROLLER POWER-UP .WORD Y'X'UPUP ;UNIT POWER-UP .WORD Y'X'CONL ;CONTROLLER ONLINE .WORD Y'X'COFF ;CONTROLLER OFFLINE .WORD Y'X'UONL ;UNIT ONLINE .WORD Y'X'UOFF ;UNIT OFFLINE .ENDC ;NDF R$$CON .IF DF T$$GMC!T$$SMC!D$$M11!D$$ZMD .WORD Y'X'LPAR ;GET/SET LINE PARAMETERS .ENDC ;T$$GMC!T$$SMC!D$$M11!D$$ZMD .PSECT MAP5 .IFF .WORD 0 .ENDC .ENDC ; DIF X,US .ENDC ; DIF X,LH ; .ENDR ; ; ; TABLE OF POINTERS TO FORK LEVEL ROUTINES. THE ORDER OF ENTRIES ; IN THIS TABLE MUST MATCH THE BIT POSITIONS OF THE CORRESPONDING ; BITS IN THE FORK REQUEST BYTE U.TFRQ IN THE UCB. ; FRKTB:: .WORD FPIRD ;FR.IRD - INPUT DONE .WORD FPORD ;FR.ORD - OUTPUT DONE .WORD FPSUI ;FR.SUI - START OF UNSOLICITED INPUT .IF DF T$$CCA .WORD FPAST ;FR.AST - CHARACTER THAT CAUSES AST .ENDC ;T$$CCA .IF DF M$$PRO .WORD FPTIM ;FR.TIM - TIME-OUT .ENDC ;M$$PRO .IF DF T$$SPC .WORD FPKIL ;FR.KIL - SEND KILL PACKET TO CLI .ENDC ;T$$SPC .IF DF T$$OOB .WORD FPOOB ;FR.OOB - CHECK FOR OUT-OF-BAND CHARACTER .ENDC ;T$$OOB .IF DF T$$ICS .WORD FPICS ;FR.ICS - SEND TSA EVENT PACKET .ENDC ;T$$ICS .IF DF T$$SCA .WORD FPSCA ;FR.SCA - SEND AST TO TSA... .ENDC ; T$$SCA .WORD FPGRQ ;FR.GRQ - GET REQUEST PACKET FROM QUEUE .IF DF T$$LTH .WORD FPLAT ;FR.LAT - LAT Port processing .ENDC ; T$$LTH .WORD FPPFP ;FR.PFP - POST-FORK PROCESSING OF ;CHARACTER IN U.TECB (U.TECO) ; ; ; I/O FUNCTION CODE DISPATCH TABLES. ; VERIFY THAT THE TABLE MATCHES THE NUMERIC VALUES OF I/O FUNCTION CODES ; ASSUME IO.WLB/400,1 ASSUME IO.RLB/400,2 ASSUME IO.ATT/400,3 ASSUME IO.DET/400,4 ASSUME IO.GTS/400,5 ASSUME SF.SMC/400,5 ASSUME SF.GMC/400,5 ASSUME IO.HNG/400,6 .IF DF T$$RPR ASSUME IO.RPR/400,11 .ENDC ASSUME IO.RTT/400,12 .IF DF B$$MAP ASSUME IO.WSD/400,13 ;WRITE SPECIAL DATA ASSUME IO.RSD/400,14 ;READ SPECIAL DATA .ENDC ;B$$MAP .IF DF T$$LTH ASSUME IO.ORG/400,33 .ENDC ;T$$LTH .IF DF T$$EIO ASSUME IO.EIO/400,37 ;EXTENDED READ/WRITE .ENDC ;T$$EIO ; ; DISPATCH TABLE FOR PROCESSING DIFFERENT FUNCTION CODES BEFORE ; ENTERING A PACKET IN THE I/O QUEUE. ; QPDSP:: .IF DF R$$IIC .WORD QPKIL ;IO.KIL .ENDC ;R$$IIC .WORD QPWLB ;IO.WLB .WORD QPRLB ;IO.RLB .WORD QPATT ;IO.ATT .WORD QPDET ;IO.DET .IF DF T$$GTS!T$$GMC!T$$SMC .WORD QPSPC ;SPECIAL FUNCTIONS: ; IO.GTS ; SF.SMC ; SF.GMC .IFF .WORD 0 .ENDC .WORD QPHNG ;IO.HNG .WORD 0 ;RESERVED EXEC CLOSE-OUT-LUN FUNCTION .WORD 0 ;RESERVED FOR USER MODE DIAGNOSTICS .IF DF T$$RPR .WORD QPRPR ;IO.RPR .IFF .WORD 0 .ENDC .WORD QPRTT ;IO.RTT .IF DF B$$MAP .WORD QPWSD ;IO.WSD .WORD QPRSD ;IO.RSD .ENDC ;B$$MAP .IF DF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW --1 .WORD QPORG .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;NDF T$$LTH .BLKW --1 .WORD QPEIO ;IO.EIO .ENDC ;T$$EIO ; ; ; DISPATCH TABLE FOR PROCESSING DIFFERENT FUNCTION CODES AFTER ; A PACKET HAS BEEN DEQUEUED FROM THE I/O QUEUE ; .IF DF T$$OVL ; NOTE: THE ROUTINES THAT ARE IN TTEXT ARE REPRESENTED WITH THE HIGH ; BIT CLEAR. PPDSP:: .WORD !100000 ;IO.WLB .WORD !100000 ;IO.RLB .WORD &77777 ;IO.ATT .WORD &77777 ;IO.DET .IF DF T$$SMC .WORD &77777 ;SF.SMC .IFF .WORD 0 .ENDC .WORD &77777 ;IO.HNG .WORD 0 ;RESERVED EXEC FUNCTION .WORD 0 ;USER MODE DIAGNOSTICS .IF DF T$$RPR .WORD !100000 ;IO.RPR .IFF .WORD 0 .ENDC .WORD !100000 ;IO.RTT .IF DF B$$MAP .WORD !100000 ;IO.WSD .WORD !100000 ;IO.RSD .ENDC ;B$$MAP .IF DF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW --1 .WORD &77777 ;ORIGINATE .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;NDF T$$LTH .BLKW --1 .WORD !100000 ;IO.EIO .ENDC ;T$$EIO .IF DF T$$LTH .WORD &77777 ;ORIGINATE .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW --1 .WORD !100000 ;IO.EIO .ENDC ;T$$EIO .IFF ;T$$OVL PPDSP:: .WORD PPWLB ;IO.WLB .WORD PPRLB ;IO.RLB .WORD PPATT ;IO.ATT .WORD PPDET ;IO.DET .IF DF T$$SMC .WORD PPSPC ;SF.SMC .IFF .WORD 0 .ENDC .WORD PPHNG ;IO.HNG .WORD 0 ;RESERVED EXEC FUNCTION .WORD 0 ;USER MODE DIAGNOSTICS .IF DF T$$RPR .WORD PPRPR ;IO.RPR .IFF .WORD 0 .ENDC .WORD PPRLB ;IO.RTT .IF DF B$$MAP .WORD PPWSD ;IO.WSD .WORD PPRSD ;IO.RSD .ENDC ;B$$MAP .IF DF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;B$$MAP .BLKW --1 .WORD PPORG ;ORIGINATE .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTH .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;T$$LTH .BLKW --1 .WORD PPEIO ;IO.EIO .ENDC ;T$$EIO .ENDC ;T$$OVL ; ; LH port dispatch table: ; .IF DF T$$LTH LHDSP:: .WORD $LHSTS ; Start session .WORD $LHINP ; Receive data from LAT process .WORD $LHOUT ; Send data to LAT process .WORD $LHSTP ; Stop session .WORD $LHGTD ; GET TRANSMIT DATA .WORD $LHTMO ; SOLICIT TIMED OUT .ENDC ;T$$LTH ; ; ; DISPATCH TABLE FOR INPUT CHARACTER PROCESSING. ; THIS TABLE IS CONSULTED EACH TIME ECHO DONE OCCURS. ; THE TABLE CONTAINS POINTERS TO ROUTINES IN THE MODULE "ICHAR". ; INDEX = INPUT LOGIC STATE VARIABLE (U.TISV IN UCBX) MULTIPLIED BY 2. ; ISDSP:: .WORD CFGRQ ;NOTHING MORE TO ECHO .IF DF T$$CTR SV.CR1==<.-ISDSP>/2 .WORD I2CTR1 ;USED FOR CTRL-R ECHOING .WORD I2CTR2 ;USED FOR CTRL-R ECHOING .IF DF R$$MPL!A$$CLI .WORD I2CTR3 ;USED FOR CTRL-R ECHOING .ENDC .WORD I2CTR4 ;USED FOR CTRL-R ECHOING .WORD I2CTR5 ;USED FOR CTRL-R ECHOING .ENDC SV.CU1==<.-ISDSP>/2 .WORD I2CTU1 ;USED FOR CTRL-U ECHOING .WORD I2CTU2 ;USED FOR CTRL-U ECHOING .IF DF R$$MPL!A$$CLI .WORD I2CTU3 ;USED FOR CTRL-U ECHOING .ENDC .WORD I2CTU4 ;USED FOR CTRL-U ECHOING ; ; ; DISPATCH TABLE FOR OUTPUT CHARACTER PROCESSING. ; THIS TABLE IS CONSULTED EACH TIME AN OUTPUT CHARACTER IS EXPANDED. ; THE TABLE CONTAINS POINTERS TO ROUTINES IN THE MODULE "EXPCHR". ; INDEX = BITS 8 AND 9 IN U.TSTA+2 IN UCBX MULTIPLIED BY 2. ; (BIT COMBINATION 11 UNUSED). ; OSDSP:: .WORD EXPC0 ;DEFAULT CASE .WORD EXPC1 ;USED FOR WRAP-AROUND .WORD EXPC2 ;USED FOR WRAP-AROUND ; ; .IF NDF T$$ONI ; NOTE THIS DATA IS DUPLICATED IN TTATT !!!! ; .IF DF T$$GMC!T$$SMC ; ; TABLE OF CHARACTERISTIC CODES FOR GET MULTIPLE CHARACTERISTICS ; FUNCTION (SF.GMC) AND SET MULTIPLE CHARACTERISTICS FUNCTION (SF.SMC). ; ; EACH RECOGNIZED CODE HAS A 1-WORD ENTRY IN THE TABLE. ; THIS WORD CONTAINS ONE OF THE FOLLOWING: ; ; 1. IF THE WORD NOT = 0 AND BIT 15 = 0: ; LOW BYTE = A BITMASK THAT MAPS THE DESIRED CHARACTERISTIC ; VALUE IN THE PROPER BYTE IN THE UCB. BITS ARE SET FOR ; RELEVANT BITS IN THE UCB BYTE. ; HIGH BYTE = OFFSET FROM START OF THE UCB TO THE BYTE ; THAT CONTAINS THE DESIRED CHARACTERISTIC. ; ; 2. IF BIT 15 = 1: ; THE WORD IS THE ADDRESS OF A SUBROUTINE THAT HANDLES ; THIS PARTICULAR CHARACTERISTIC. ; (ALL VIRTUAL ADDRESSES IN THE DRIVER ARE 120000 OR HIGHER). ; ; 3. IF THE WHOLE WORD = 0: ; THIS CHARACTERISTIC IS NOT RECOGNIZED BY SF.GMC OR SF.SMC. ; ; ; DEFINE MACRO TO GENERATE TABLE ENTRIES ; .MACRO MCGEN NAME,OFS,BM .IF LE NAME-MCHI .=MCTAB+<2*> .IF NB BM .IF LE BM-377 .BYTE BM,OFS .IFF .BYTE BM/400,OFS+1 .ENDC .IFF .WORD OFS .ENDC .IFF .ERROR ;ILLEGAL CHARACTERISTIC .ENDC .ENDM MCGEN ; MCHI == TC.MAX-1 ;HIGHEST RECOGNIZED CHARACTERISTIC ; MCTAB:: .REPT MCHI .WORD 0 ;INITIALIZE WHOLE TABLE TO ZEROS .ENDR MCGEN TC.WID,U.CW4,377 ;NUMBER OF COLUMNS MCGEN TC.LPP,U.TLPP,377 ;NUMBER OF LINES PER PAGE .IF DF D$$H11!D$$Z11!D$$V11 MCGEN TC.RSP,MCRSP ;RECEIVE SPEED MCGEN TC.XSP,MCXSP ;TRANSMIT SPEED MCGEN TC.PAR,MCPAR ;PARITY GENERATION AND CHECKING MCGEN TC.EPA,MCEPA ;PARITY SENSE MCGEN TC.CLN,MCCLN ;7-BIT CHARACTER LENGTH .IF DF T$$MOD MCGEN TC.ASP,MCASP ;ANSWER SPEED MCGEN TC.ABD,U.TSTA+6,S4.ABD ;AUTO-BAUD SPEED DETECT .ENDC ;T$$MOD .ENDC ;D$$H11!D$$Z11!D$$V11 MCGEN TC.ISL,U.UNIT,377 ;SUB-LINE ON CONTROLLER MCGEN TC.TTP,MCTTP ;TERMINAL TYPE MCGEN TC.SCP,U.CW2,U2.CRT ;SCOPE MCGEN TC.HFL,U.TSTA+6,S4.HFL ;HORIZONTAL FILL REQUIREMENT MCGEN TC.VFL,U.TSTA+6,S4.VFL ;VERTICAL FILL REQUIREMENT MCGEN TC.HFF,U.TSTA+6,S4.HFF ;HARDWARE FORM-FEED MCGEN TC.HHT,U.TSTA+6,S4.HHT ;HARDWARE TAB MCGEN TC.ACR,U.TSTA+4,S3.ACR ;AUTOMATIC CR-LF ON LONG LINES MCGEN TC.PPT,U.TSTA+4,S3.PPT ;PRINTER-PORT MCGEN TC.SMR,U.CW2,U2.LWC ;LOWERCASE INPUT ENABLED .IF DF T$$ESC MCGEN TC.ESQ,U.CW2,U2.ESC ;ESCAPE SEQUENCES RECOGNIZED .ENDC ;T$$ESC .IF DF T$$MOD MCGEN TC.DLU,MCRMT ;DIAL-UP LINE .ENDC MCGEN TC.HLD,U.CW2,U2.HLD ;HOLD-SCREEN MODE MCGEN TC.NEC,U.TSTA+4,S3.NEC ;NO-ECHO MCGEN TC.SLV,U.CW2,U2.SLV ;SLAVED TERMINAL MCGEN TC.PRI,U.CW2,U2.PRV ;PRIVILEGED TERMINAL MCGEN TC.FDX,U.TSTA+4,S3.FDX ;FULL DUPLEX MCGEN TC.PTH,U.TSTA+4,S3.PTH ;PASS-THROUGH MODE IS ENABLED MCGEN TC.BIN,MCBIN ;READ-PASS-ALL MCGEN TC.8BC,U.TSTA+4,S3.8BC ;8 BIT CHARACTERS PASSED ON READ MCGEN TC.TBF,MCTBF ;TYPE-AHEAD BUFFER ACTIVE COUNT MCGEN TC.CTS,MCCTS ;CONTROL-S STATUS MCGEN TC.HSY,MCHSY ;HOST/TERMINAL SYNCHRONIZATION MCGEN TC.ANI,U.TSTA+6,S4.ANI ;ANSI CRT MCGEN TC.AVO,U.TSTA+6,S4.AVO ;ADVANCED VIDEO MCGEN TC.BLK,U.TSTA+6,S4.BLK ;BLOCK MODE MCGEN TC.DEC,U.TSTA+6,S4.DEC ;DEC CRT MCGEN TC.EDT,U.TSTA+6,S4.EDT ;EDIT MODE MCGEN TC.RGS,U.TSTA+6,S4.RGS ;REGIS MCGEN TC.SFC,U.TSTA+6,S4.SFC ;SOFT CHARACTERS ; .IF DF R$$MPL!A$$CLI .IF DF C$$CTC MCGEN TC.TLC,U.TSTA+4,S3.CTC ;CONTROL-C NOTIFICATION .ENDC ;C$$CTC MCGEN TC.NBR,U.MUP,UM.NBR ;NOBROADCAST .ENDC ;R$$MPL!A$$CLI .IF DF T$$ACD MCGEN TC.ACD,MCACD ;ANCILLARY CONTROL DRIVER (ACD) .ENDC ;T$$ACD .IF DF T$$SPL MCGEN TC.RAT,MCTYP ;READ-AHEAD TYPE MCGEN TC.TBS,MCTBS ;TYPEAHEAD BUFFER SIZE .IFF ;T$$SPL MCGEN TC.RAT,U.TSTA+4,S3.TAB ;READ-AHEAD TYPE .ENDC ;T$$SPL .IF DF T$$SER MCGEN TC.TBM,U.MUP,UM.SER ;TYPEAHEAD BUFFER MODE (TASK OR CLI) .ENDC ;T$$SER ; .IF DF T$$OOB MCGEN TC.OOB,MCOOB ;OUT-OF-BAND/HELLO/INCLUDE CHARACTERS .ENDC ;T$$OOB .IF DF T$$ICS MCGEN TC.ICS,MCICS ;NOTIFY OF CHANGE IN TABUF ;(INPUT COUNT STATE) .ENDC ;TT$ICS .IF DF T$$SCA MCGEN TC.SSC,MCSSC ;SPECIFY SWITCH CHARACTERS MCGEN TC.TMM,MCTMM ;EXIT TERMINAL MANAGEMENT MODE .ENDC ;T$$SCA MCGEN TC.TSY,MCTSY ;OUTPUT FLOW CONTROL .IF DF T$$MHU ;MODEM HANG-UP NOTIFY MCGEN TC.MHU,MCMHU ;REQUEST MODEM HANG-UP NOTIFICATION .ENDC ;T$$MHU .IF DF T$$LTH&M$$NET MCGEN TC.QDP,MCQDP ;GET QUEUE DEPTH AND LAT CONNECT/DISCONNEDT STATUS MCGEN TC.MAP,MCMAP ;SET UP LAT MAPPING .ENDC ;T$$LTH&M$$NET .=MCTAB+<2*MCHI> ;END OF TABLE ; ; .ENDC ;T$$GMC!T$$SMC .ENDC ;NDF T$$ONI ; ; .IF DF T$$MOD ; ; DISPATCH TABLE FOR MODEM INTERRUPT SERVICE ROUTINE. ; INDEX = BITS 1 AND 2 IN U.STS (US.DSB AND US.CRW). ; MDSP:: .WORD MODI4 ;ENABLED, NOT WAITING FOR CARRIER .WORD MODI2 ;DISABLED, NOT WAITING FOR CARRIER .WORD MODI5 ;ENABLED, WAITING FOR CARRIER .WORD MODI3 ;DISABLED, WAITING FOR CARRIER .ENDC ;T$$MOD ; ; ; MISCELLANEOUS WORDS ; .IF DF D$$V11!D$$H11 YVXOFF::.WORD CH.CTS!100000 ;XOFF FOR DHU/DHV11/DH YVXON:: .WORD CH.CTQ!100000 ;XON FOR DHU/DHV11/DH .ENDC ;D$$V11!D$$H11 .IF NDF T$$SPL $DALED::.BLKW 1 ;SAVED DRIVER MAPPING FOR KISAR6 .ENDC ;NDF T$$SPL .IF DF T$$OVL .PSECT MAP6 EXTMAP:: .BLKW 1 ;APR5 MAPPING OF TTDRV EXTENSION (OVERLAY) ROTMAP:: .BLKW 1 ;APR5 MAPPING OF TTDRV ROOT TTEXT: .RAD50 /TTEXT / ;NAME OF COMMON TO MAP AS OVERLAY .PSECT MAP5 .ENDC ;T$$OVL FREEB:: .WORD 0 ;FREE BUFFER LISTHEAD DCB0:: .BLKW 1 ;POINTER TO DCB FOR FIRST TERMINAL ;SET UP BY INITIALIZATION ROUTINE OPTIMR::.WORD OPTIME ;OUTPUT TIMEOUT INTERVAL ; ; .IF DF D$$H11!D$$V11 .IF DF M$$EXT ; SAVED SETTINGS FOR UMR(S) TO MAP DRIVER WITH 18-BIT ADDRESSES ; IDENTICAL TO 16 BIT ADDRESSES ; UMR5S:: .BLKW 2 ;UMR 5 .IF NDF T$$SPL .BLKW 2 ;UMR 6 .ENDC ;NDF T$$SPL .IFF ;M$$EXT .IF DF D$$H11 ; RELOCATION CONSTANT TO TRANSFORM A VIRTUAL ADDRESS WITHIN THE DRIVER ; TO A PHYSICAL ADDRESS. THIS RELOCATION IS REQUIRED ONLY FOR DMA ; CONTROLLERS (SUCH AS THE DH-11), AND ONLY IF EXTENDED MEMORY IS NOT ; PRESENT. THE FORMAT OF THE DOUBLE-WORD RELOCATION CONSTANT IS SUCH ; THAT WHEN IT IS ADDED TO A VIRTUAL ADDRESS IN THE RANGE 120000-157777 ; (CARRY IS ADDED TO BIT 4 OF THE HIGH ORDER WORD), THE RESULT IS ; THE 18-BIT PHYSICAL ADDRESS (2 HIGH BITS IN BITS 4-5 OF RELC+0, ; 16 LOW BITS IN RELC+2). ; ; THE RELOCATION CONSTANT IS CALCULATED AND STORED HERE BY THE POWER-UP ; CODE. ; ; IF EXTENDED MEMORY IS PRESENT, THE POWER-UP CODE HAS MAPPED THE DRIVER ; IN UMR'S 5 AND 6, WHICH MEANS THAT DRIVER VIRTUAL ADDRESSES ARE ; IDENTICAL WITH THE 18-BIT ADDRESSES. ; RELC:: .BLKW 2 .ENDC ;D$$H11 .ENDC ;M$$EXT .ENDC ;D$$H11!D$$V11 .IF DF D$$V11 ; DHV11 RELOCATION CONSTANT TO TRANSFORM A VIRTUAL ADDRESS WITHIN THE DRIVER ; TO A PHYSICAL ADDRESS. THE FORMAT OF THE DOUBLE-WORD RELOCATION CONSTANT ; IS SUCH THAT WHEN IT IS ADDED TO A VIRTUAL ADDRESS IN THE RANGE 120000-157777 ; THE RESULT IS THE 18-BIT/22-BIT PHYSICAL ADDRESS. ; RELCV:: .BLKW 2 .IF DF K$$DAS .BLKW 2 ;ANOTHER CONSTANT TO MAP D-SPACE POOL REGION .ENDC ;K$$DAS .ENDC ;D$$V11 .IF DF T$$CUP ; TABLE OF POINTERS TO ROUTINES TO EXPAND A CURSOR POSITIONING COMMAND ; INTO A CHARACTER STRING APPROPRIATE FOR THE TERMINAL TYPE. ; INDEX INTO THIS TABLE = 2*X-2, WHERE X = THE VALUE IN BITS 6-7 OF THE ; TABLE "TTYP1" (SEE ABOVE) FOR THE TERMINAL TYPE. ; CPOST:: .WORD CPOS1 ;1 - VT05 STYLE .WORD CPOS2 ;2 - VT52 STYLE .WORD CPOS3 ;3 - VT100 STYLE ; ; ; NOTE - THE LOCATIONS EXPCP, CP0, CP1, CP2 AND CP3 BELOW ARE READ/WRITE ; LOCATIONS! ; THIS IS SAFE SINCE THEY ARE ONLY USED BY THE SYSTEM STATE CODE ; IN MODULE "TTRW" - NEVER BY INTERRUPT LEVEL CODE. ; ; POINTER TO ROUTINE TO EXPAND 1 CHARACTER ON OUTPUT, OR TO ROUTINE ; THAT EXPANDS CURSOR POSITIONING COMMAND. ; EXPCP:: .WORD EXPC3 ; ; TERMINAL-DEPENDENT CURSOR POSITIONING COMMAND STRINGS ; ; TYPE 2 - VT52. MUST BE LOCATED ON WORD BOUNDARY! ; CP2:: .BYTE CH.ESC,'H,CH.ESC,'J .BYTE CH.ESC,'Y,0,0 ; ; TYPE 1 - VT05 ; CP1:: .BYTE 35,0,0,0,0 ;4 FILLERS AFTER HOME CURSOR .BYTE 37,0,0,0,0 ;4 FILLERS AFTER ERASE-TO-EOS .BYTE 16,0,0,0,0,0,0 ;4 FILLERS AFTER Y-COORDINATE ; ; TYPE 3 - VT100 ; CP3:: .BYTE CH.ESC,'[,'2,'J .BYTE CH.ESC,'[,0,0,0,';,0,0,0 CP3A:: .BYTE 'H .EVEN .ENDC ;T$$CUP .IF DF D$$M11&R$$MPL&T$$COM YMCP1:: .BLKW 1 ;POINTER TO $YMCTB .ENDC ;D$$M11&R$$MPL&T$$COM .IF NDF R$$MPL ; ;TABLE OF POINTERS TO UCB TABLES ; TTUCB:: .IRP X, .IF DF D$$'X'11 .WORD D'X'UCB .IFF .WORD 0 .ENDC .ENDR ; ; DL-11 DATABASES ; .IF DF D$$L11 DLUCB:: ;DL UCB POINTER TABLE POINTER TABLE N=0 .REPT D$$L11 .WORD DLUC0+N N=N+4 .ENDR DLUC0: .BLKW D$$L11*2 ;DL UCB/CSR TABLE .ENDC ; DF D$$L11 ; ; DH-11 DATABASES ; .IF DF D$$H11 DMUCB:: ;POINT DM11-BB UCB'S TO DH UCB'S DHUCB:: ;DH UCB POINTER TABLE POINTER TABLE N=0 .REPT D$$H11 .IF DF D$$M11 .WORD DHUC0+N+2 ;POINTER TO DH11 UCB TABLE N=N+38. .IFF .WORD DHUC0+N ;POINTER TO DH11 UCB TABLE N=N+36. .IFTF .ENDR DHUC0: ;DH UCB TABLES .REPT D$$H11 .IFT .BLKW 1 ;DM11-BB CSR ADDRESS .ENDC .BLKW 1 ;DH11 CSR ADDRESS .REPT 16. .WORD 0 ;ADDR OF UCB FOR LINE (PLUGGED AT TTPWF) .ENDR .WORD -1 ;END OF UCB LIST .ENDR .ENDC ; DF D$$H11 ; ; DZ-11 DATABASES ; .IF DF D$$Z11 DZUCB:: ;DZ UCB POINTER TABLE POINTER TABLE N=0 .REPT D$$Z11 .WORD DZUC0+N ;POINTER TO DZ11 UCB TABLE (INDEXED BY ; CONTROLLER NUMBER) N=N+20. .ENDR DZUC0: ;REF LABEL .REPT D$$Z11 .BLKW 1 ;DZ CSR ADDRESS .REPT 8. .WORD 0 ;UCB ADDRESS FOR EACH LINE .ENDR .WORD -1 ;END OF UCB LIST .ENDR .ENDC ; DF D$$Z11 ; ; DJ-11 DATABASES ; .IF DF D$$J11 DJUCB:: ;DJ UCB POINTER TABLE POINTER TABLE N=0 .REPT D$$J11 .WORD DJUC0+N ;POINTER TO DJ11 UCB TABLE N=N+36. .ENDR DJUC0: ;REF LABEL .REPT D$$J11 .BLKW 1 ;DJ CSR ADDRESS .REPT 16. .WORD 0 ;ADDRESS OF LINE'S UCB .ENDR .WORD -1 ;END OF UCB LIST .ENDR .ENDC ; DF D$$J11 ; ; DHV-11 DATABASES ; .IF DF D$$V11 DVUCB:: ;REF LABEL N=0 .REPT D$$V11 .WORD DVUC0+N ;POINTER TO DHV11 UCB TABLE N=N+36. .ENDR DVUC0: ;REF LABEL .REPT D$$V11 .BLKW 1 ;DHV CSR ADDRESS .REPT 16. .WORD 0 ;UCB ADDRESS FOR EACH LINE .ENDR .WORD -1 ;END OF UCB LIST .ENDR .ENDC ; DF D$$V11 .ENDC ;NDF R$$MPL .PAGE .IF DF B$$MAP ; ; CT VIDEO TASK INTERFACE DATABASE ; TFWPAR::.RAD50 /TFWCOM/ ;TFWCOM'S NAME VT.NAM::.RAD50 /TFW.../ ;VIDEO TASK'S NAME DTYPE:: .BLKW 1 ;TEMPORARY DATA TYPE STORAGE CTEX:: .RAD50 /C$CTEX/ ;TASK NAME OF THE CTEX DISPATCHER IDOFLG::.WORD 0 ;FLAG FOR INTERRUPT-DO STIMER::.WORD 1 ;SCREEN TIMER COUNTER ; ; THIS IS THE TABLE OF ADDRESSES FOR THE SPECIAL DATA "TYPEAHEAD" BUFFERS. ; ; BECAUSE OF THE WAY THAT THIS IS BEING DONE THERE CAN ONLY BE ONE TERMINAL ; THAT SUPPORTS IO.RSD. FOR THE PRO ENVIRONMENT THIS IS NOT A PROBLEM. ; T.RSDT::.WORD 0 ;THIS IS NOT A SUPPORTED DATA TYPE FOR IO.RSD .WORD GIDIS ;BUFFER FOR GIDIS DATA T.RSDN==<<.-T.RSDT>/2>-1 ;HIGHEST LEGAL DATA TYPE FOR IO.RSD ; ; TYPEAHEAD BUFFER FOR GIDIS DATA ; GIDIS: .BYTE 0 ;INSERTION POINTER .BYTE 0 ;RETRIEVAL POINTER .BYTE 0 ;ACTIVE COUNT .BYTE T$$BFL-4 ;BUFFER LENGTH .BLKB T$$BFL-4 ;DATA ; THIS PSECT IS USED TO FORCE ALIGNMENT OF TFWCOM ON A 32 WORD BOUNDARY. ; IT WILL COLLATE BEFORE $$$$$$ AND ITS SIZE IS SET IN THE BUILD FILE .PSECT $$$$$A ; THIS PSECT IS USED TO DEFINE THE LENGTH OF TFWCOM. ; IT WILL COLLATE AFTER $$$$$$ .PSECT $$$$$. TFWEND == . ;ADDRESS END OF TFWCOM .ENDC ;B$$MAP .PSECT $$$$$$,OVR .IF DF B$$MAP TFWCOM:: ;THIS IS THE START OF THE TFWCOM ;A PARTITION WILL OVERMAP THIS ;SECTION OF DATA. THAT PARTITION ;IS USED BY TFW... TO GET AT THIS DATA VT.ADR::.WORD TFWCOM ;THE VIRTUAL ADDRESS OF THE START ;OF TFWCOM FROM THE DRIVER'S POINT ;OF VIEW VT.APR::.BLKW 1 ;THE PHYSICAL ADDRESS OF TFWCOM VT.LEN::.WORD </64.> ;LENGTH OF THE COMMON IN 32. WORD BLOCKS VT.TCB::.BLKW 1 ;VIDEO TASK'S TCB ADDRESS T.FLAG::.WORD 0 ;FLAG WORD FOR VIDEO TASK ; ; FLAG WORD BIT DEFINITIONS ; TF.INT == 1 ;INIT VIDEO TASK TF.ABO == 2 ;ABORT CURRENT OUTPUT TF.SPN == 4 ;SUSPEND CURRENT OUTPUT TF.BTM == 10 ;BLINK TIMEOUT TF.CTM == 20 ;CURSOR TIMEOUT TF.STM == 40 ;SCREEN BLANK TIMEOUT TF.PRT == 400 ;PRINT SCREEN FLAG FOR TFW... TF.SON == 1000 ;TURN SCREEN ON FLAG FOR TFW... CT$TIC == 1 ;TICK COUNT FOR CT TIMER I$MAX == T$$BFL-4 ;MAXIMUM NUMBER OF CHARS IN THE INPUT BUFFER ; ; INTERNAL BUFFER FORMAT - ALSO USED FOR TFW OUTPUT BUFFERS ; OB.LNK == 0 ;LINK TO THE NEXT BUFFER OB.LEN == 2 ;DATA LENGTH (=N) OB.TYP == 3 ;DATA TYPE (SEE THE DATA PATH SPECIFIER VALUES) OB.DAT == 4 ;DATA (N BYTES) ; ; INPUT BUFFER FORMAT (FROM TFW) ; IB.TYP == 0 ;DATA TYPE (SEE THE DATA PATH SPECIFIER VALUES) IB.LEN == 1 ;DATA LENGTH (=N) IB.SPI == 2 ;TYPE SPECIFIC INFORMATION IB.DAT == 4 ;DATA (N BYTES) ; ; MORE INTERFACE DATA FOR TFW ; T.BTMR::.WORD 0 ;BLINK TIMER T.CTMR::.WORD 0 ;CURSOR TIMER T.STMR::.WORD 0 ;SCREEN BLANK TIMER T.OPKP::.WORD 0 ;OUTPUT BUFFER LIST T.OREM::.WORD 0 ;COUNT OF OUTPUT CHARACTERS T.OPKC::.WORD 0 ;COUNT OF BYTES PROCESSED IN CURRENT OUTPUT PKT ; ; INPUT BUFFER (FROM TFW) ; T.INBF::.BYTE 0 ;DATA STREAM ID .BYTE 0 ;DATA COUNT .WORD 0 ;TYPE SPECIFIC INFORMATION .BLKW I$MAX/2 ;THEN COMES THE DATA ; ; INTERMEDIATE INPUT AND OUTPUT BUFFER ; ; BYTE CONTENTS ; ------------------------------------ ; 0-1 LINK TO NEXT BUFFER (0 IF THIS IS LAST) ; 2 LOGICAL BUFFER LENGTH ; 3 DATA TYPE ; 4-47 DATA ; ; THE FOLLOWING BUFFER IS USED WHEN THE OUTPUT BUFFER IS NOT IN THE ; NORMAL BUFFER CHAIN FORMAT. THIS OCCURS WHEN ECHOING IS DONE AND ; WHEN THE TERMINAL DRIVER PUTS SOMETHING SPECIAL OUT, SUCH AS ; PROMPT STRINGS. ; T.TBUF::.WORD 0 ;ZERO LINK WORD - ONLY ONE BUFFER .BLKB 1 ;BUFFER LENGTH .BYTE 0 ;DATA TYPE 0 = TEXT .BLKB T$$BFL-4 ;DATA ; ; DEFINE OFFSETS FOR THE LOCATIONS IN TFWCOM FOR THE VIDEO TASK ; VT$ADR == VT.ADR-TFWCOM ;THE VIRTUAL ADDRESS OF THE START ;OF TFWCOM FROM THE DRIVER'S POINT ;OF VIEW VT$APR == VT.APR-TFWCOM ;THE PHYSICAL ADDRESS OF TFWCOM VT$LEN == VT.LEN-TFWCOM ;LENGTH OF THE COMMON IN 32. WORD BLOCKS T$FTCB == VT.TCB-TFWCOM ;VIDEO TASK'S TCB ADDRESS T$FLAG == T.FLAG-TFWCOM ;FLAG WORD FOR VIDEO TASK T$BTMR == T.BTMR-TFWCOM ;BLINK TIMER T$CTMR == T.CTMR-TFWCOM ;CURSOR TIMER T$STMR == T.STMR-TFWCOM ;SCREEN BLANK TIMER T$OPKP == T.OPKP-TFWCOM ;OUTPUT BUFFER LIST T$OREM == T.OREM-TFWCOM ;COUNT OF OUTPUT CHARACTERS T$OPKC == T.OPKC-TFWCOM ;COUNT OF BYTES PROCESSED IN CURRENT OUTPUT PKT T$INBF == T.INBF-TFWCOM ;CIRCULAR INPUT BUFFER .ENDC ;B$$MAP .PAGE ;+ ; DRIVER INITIALIZATION ROUTINE. ; ; THIS CODE IS EXECUTED ONCE ONLY AT THE FIRST CALL ; TO THE DRIVER AFTER IT HAS BEEN LOADED. ; IT SERVES THE FOLLOWING PURPOSES: ; 1. ESTABLISH THE MAPPING OF THE DRIVER DATA AREA ; AND SAVE THE APR VALUES IN SAVE LOCATIONS SO THEY CAN ; BE QUICKLY LOADED WHENEVER THE DRIVER IS CALLED. ; 2. SAVE KINAR5 IN THE TT-DRIVER FORK BLOCK (FORK BLOCKS ; IF MULTI-PROCESSOR SYSTEM). ; 3. CALCULATE AND SAVE UMR'S 5 AND 6 VALUES (IF DH-11 ; AND EXTENDED MEMORY SUPPORTED). ; 4. CALCULATE AND SAVE A CONSTANT USED TO TRANSFORM A DRIVER ; VIRTUAL ADDRESS INTO A PHYSICAL ADDRESS (IF DH-11 BUT ; NOT EXTENDED MEMORY SUPPORTED). ; 5. INITIALIZE AND QUEUE THE TT-DRIVER CLOCK BLOCK. ; 6. SAVE A POINTER TO THE FIRST TT DCB IN THE SYSTEM. ; 7. CONSTRUCT THE LIST OF FREE BUFFERS IN THE TT-DRIVER BUFFER POOL. ; ; IN A SYSTEM THAT SUPPORTS SEPARATE KERNEL DATA SPACE MAPPING, ; THIS MODULE RESIDES IN THE COMMON BLOCK "TTCOM". ; WHEN "INIT" IS CALLED IN SUCH A SYSTEM, THE MAPPING IS: ; INSTR. SPACE APR 5: DRIVER CODE ; INSTR. SPACE APR 6: DRIVER DATA AND INITIALIZATION ROUTINE ; (FIRST 4 KW OF TTCOM) ; DATA SPACE APR 5: DRIVER CODE ; DATA SPACE APR 6: UNDEFINED ; ON RETURN FROM "INIT", THE MAPPING IS THE "NORMAL" DRIVER MAPPING, ; WHICH IS: ; INSTR. SPACE APR 5: DRIVER CODE (TTDRV) ; DATA SPACE APR 5-6: DRIVER DATA (TTCOM) ; ; IN A SYSTEM THAT DOES NOT SUPPORT SEPARATE KERNEL DATA SPACE MAPPING, ; THIS MODULE RESIDES TOGETHER WITH ALL OTHER CODE AND DATA IN "TTDRV". ; THE COMMON BLOCK "TTCOM" DOES NOT EXIST. IN SUCH A SYSTEM, WHEN ; "INIT" IS CALLED, THE MAPPING IS: ; INSTR. AND DATA SPACE APR 5: DRIVER CODE ; ON RETURN, THE MAPPING IS THE "NORMAL" DRIVER MAPPING, WHICH IS: ; INSTR. SPACE APR 5-6: DRIVER CODE AND DATA (TTDRV) ; ; FROM THE DESCRIPTION ABOVE, IT FOLLOWS THAT THE INITIALIZATION ROUTINE ; MAY BE MAPPED EITHER IN APR 5 (NON-D-SPACE SYSTEM) OR APR 6 (D-SPACE ; SYSTEM) WHEN CALLED. IT MUST THEREFORE BE WRITTEN IN POSITION-INDEPENDENT ; CODE (PIC). ;- ; ; TTPOOL::.BLKW 1 ;START OF DRIVER'S PRIVATE POOL ; ; NOTE - THE ROUTINE BELOW MUST FIT INTO ONE FIXED LENGTH BUFFER ; (LENGTH = T$$BFL BYTES), OR IT WILL OVERWRITE ITSELF. ; NOTE ALSO THAT THE ROUTINE MUST MAP ITSELF IN BOTH I- AND D-SPACE. ; ; INPUT: ; R0 START OF DRIVER POOL ; R1 POINTER T$$BFL BYTES BELOW END OF DRIVER POOL ; CPOOL: MOV R0,R2 ;COPY POINTER TO CURRENT BUFFER ADD #T$$BFL,R0 ;POINT TO NEXT BUFFER MOV R0,@R2 ;LINK NEW TO OLD CMP R0,#160000-T$$BFL ;WITHIN 4K BOUNDARY? BHIS 10$ ;N - STOP HERE CMP R0,R1 ;END OF POOL? BLO CPOOL ;N - LOOP 10$: CLR @R2 ;Y - CLEAR POINTER IN LAST BUFFER RETURN ;ALL DONE .IIF GT .-, .ERROR ; ; INIT:: .IF DF R$$PRO MOV #60,R0 ;MOVE THE DL INTERRUPT VECTORS MOV #220,R1 ;TO THE PRINTER PORT VECTOR MOV (R0)+,(R1)+ ;LOCATIONS. THIS IS BEING DONE MOV (R0)+,(R1)+ ;BECAUSE THE PRINTER PORT IS NOW USED. MOV (R0)+,(R1)+ ;THE DL VECTOR IS USED ON THE MOV (R0),(R1) ;BRIDGE SYSTEM. .ENDC ;R$$PRO MOV @#KINAR5,R0 ;GET START OF DRIVER CODE .IF DF M$$PRO MOV #M$$PRO,R2 ;GET NUMBER OF CPU'S MOV #$TTFB+10,R1 ;GET POINTER TO KINAR6 WORD IN ;FORK BLOCK FOR CPU 0 20$: MOV R0,@R1 ;SAVE KINAR5 IN FORK BLOCK ADD #TT$UQL,R1 ;POINT TO NEXT UCB QUEUE SOB R2,20$ ;LOOP .IFF ;M$$PRO MOV R0,@#$TTFB+10 ;SAVE KINAR5 IN FORK BLOCK .ENDC ;M$$PRO .IF DF T$$COM MOV @#$TTCOM,-(SP) ;SAVE TTCOM PCB ADDRESS CLR @#$TTCOM ;INDICATE DRIVER INITIALIZATION DONE .IF DF D$$M11 MOV @#YMCTBP,R1 ;GET POINTER TO $YMCTB .IFTF ;D$$M11 MOV @#KINAR6,R0 ;GET START OF DRIVER DATA .IF DF T$$SPL MOV R0,@#KDSAR6 ;MAP TTCOM THROUGH DATA SPACE APR 6 MOV R0,@#$DALED ;SAVE MAPPING .IFF ;T$$SPL MOV R0,@#PAR5S ;SAVE A COPY MOV R0,@#KDSAR5 ;MAP DRIVER DATA .ENDC ;T$$SPL MOV @#KINAR5,@#PAR6I ;GET START OF DRIVER CODE ADD #200,@#PAR6I ;COMPUTE AND SAVE HIGH 4K MAPPING .IFT ;D$$M11 MOV R1,@#YMCP1 ;SAVE POINTER TO $YMCTB .ENDC ;D$$M11 .ENDC ;T$$COM MOV R0,R1 ;COPY REAL START OF DRIVER DATA .IF NDF T$$SPL ADD #200,R0 ;ADD THE EQUIVALENT OF 4 K WORDS MOV R0,@#KISAR6 ;MAP REST OF DRIVER MOV R0,@#$DALED ;SAVE DRIVER KISAR6 .IF DF D$$M11&R$$MPL&T$$ONI MOV YMCTBP,YMC12 ;MOVE A COPY TO APR6 FOR OVERLAY .ENDC ;D$$M11&R$$MPL&T$$ONI .ENDC ;NDF T$$SPL .IF DF T$$OVL MOV KINAR5,ROTMAP ;SET UP POINTER TO MAIN APR5 CODE MOV #TTEXT,R3 ;POINT TO RAD50 OF TTEXT CALL $SRNAM ;GET ADDRESS OF PARTITION BCC 25$ ;CC - GOT IT CRASH ;NO GOOD IF NOT LOADED 25$: MOV P.REL(R2),EXTMAP ;SET UP POINTER TO OVERLAY .IF NDF T$$SPL MOV KISAR5,-(SP) ;SAVE MAPPING MOV P.REL(R2),KISAR5 ;MAP TO EXTENSION MOV KISAR6,@#120000 ;SAVE MAPPING TO APR6 CODE MOV (SP)+,KISAR5 ;RESTORE MAPPING .ENDC ;NDF T$$SPL .ENDC ;T$$OVL .IF DF D$$H11!D$$V11 ; ; CALCULATE MAPPING INFORMATION NECESSARY FOR DMA DEVICES ; .IF DF D$$V11 ; ; CALCULATE AND SAVE THE DOUBLE-WORD RELOCATION CONSTANT TO TRANSFORM A DRIVER ; VIRTUAL ADDRESS INTO AN 18-BIT/22-BIT ADDRESS FOR THE DHV11. A SECOND ; RELOCATION CONSTANT IS NECESSARY FOR I/D-SPACE SYSTEMS SINCE BUFFERS WHICH ; ARE IN PRIMARY POOL DON'T HAVE A VIRTUAL ADDRESS WHICH MATCHES THE PHYSICAL ; ADDRESS IN THOSE SYSTEMS. ; .IF DF M$$EXT!D$$H11 MOV R1,-(SP) ;SAVE START APR BIAS OF DRIVER DATA .IFTF ;M$$EXT!D$$H11 .IF DF R$$EIS CLR R0 ;PREPARE FOR COMBINED SHIFT ASHC #6,R0 ;GET PHYS. START ADDRESS .IFF ;R$$EIS SWAB R1 ;USE NON-EIS EMULATION OF ASHC #6,R0 MOVB R1,R0 ; BIC #377,R1 ; ROR R0 ; ROR R1 ; ROR R0 ; ROR R1 ; .ENDC ;R$$EIS .IF DF K$$DAS SUB #140000,R1 ;SUBTRACT TTCOM BASE VIRTUAL ADDRESS .IFF ;K$$DAS SUB #120000,R1 ;SUBTRACT DRIVER BASE VIRTUAL ADDRESS .IFTF ;K$$DAS SBC R0 ;TAKE CARE OF CARRY BIC #^C<77>,R0 ;MAKE SURE ONLY 6 BITS MAXIMUM ARE SET MOV R0,@#RELCV ;SAVE HIGH 2/6 BITS MOV R1,@#RELCV+2 ;SAVE LOW 16 BITS OF RELOCATION CONSTANT .IFT ;K$$DAS MOV @#KDSAR1,R1 ;GET START APR BIAS OF POOL IN I/D-SPACE SYSTEM CLR R0 ;PREPARE FOR COMBINED SHIFT ASHC #6,R0 ;GET PHYS. START ADDRESS (I/D SYS REQUIRES EIS) SUB #20000,R1 ;SUBTRACT POOL BASE VIRTUAL ADDRESS SBC R0 ;TAKE CARE OF CARRY BIC #^C<77>,R0 ;MAKE SURE ONLY 6 BITS MAXIMUM ARE SET MOV R0,@#RELCV+4 ;SAVE HIGH BITS MOV R1,@#RELCV+6 ;SAVE LOW BITS .ENDC ;K$$DAS .IFT ;M$$EXT!D$$H11 MOV (SP)+,R1 ;RESTORE START APR BIAS OF DRIVER DATA .ENDC ;M$$EXT!D$$H11 .ENDC ;D$$V11 .IF DF M$$EXT ; ; CALCULATE AND SAVE THE UMR VALUE(S) TO MAP ALL OF THE DRIVER DATA AREA ; .IF DF R$$EIS CLR R0 ;PREPARE FOR ASHC INSTRUCTION ASHC #6,R0 ;GET PHYS. START ADDRESS .IFF ;R$$EIS SWAB R1 ;USE NON-EIS EMULATION OF ASHC #6,R0 MOVB R1,R0 ; BIC #377,R1 ; ROR R0 ; ROR R1 ; ROR R0 ; ROR R1 ; .ENDC ;R$$EIS MOV #UMR5S,R2 ;POINT AT SAVED UMR 5 MOV R1,(R2)+ ;SAVE UMR 5 SETTING MOV R0,(R2)+ ; .IF NDF T$$SPL ADD #20000,R1 ;ADVANCE 8 K BYTES ADC R0 ; MOV R1,(R2)+ ;SAVE UMR 6 SETTING MOV R0,(R2)+ ; .ENDC ;NDF T$$SPL .IFF ;M$$EXT .IF DF D$$H11 ; ; COMPUTE AND SAVE THE DOUBLE-WORD RELOCATION CONSTANT TO TRANSFORM A DRIVER ; VIRTUAL ADDRESS INTO AN 18-BIT ADDRESS. ; (SEE DETAILED DESCRIPTION AT LABEL "RELC:"). ; SWAB R1 ;SHIFT KISAR5 6 BITS LEFT MOVB R1,R0 ;GET ORIGINAL BITS 10-11 IN BITS 2-3 RORB R1 ;ORIGINAL BIT 8 INTO CARRY ROR R1 ;BIT 8 INTO BIT 15, BIT 9 INTO CARRY ROR R1 ;BIT 9 INTO BIT 15 - SHIFT IS COMPLETED BIC #77,R1 ;CLEAR 6 LOW BITS ASL R0 ;SHIFT 2 HIGH BITS INTO BITS 4-5 ASL R0 ; SUB #120000,R1 ;SUBTRACT DRIVER BASE VIRTUAL ADDRESS BCC 30$ ;NO CARRY - JUMP SUB #20,R0 ;SUBTRACT CARRY FROM R0 BIT 4 30$: BIC #^C<60>,R0 ;CLEAR ALL BUT BITS 4-5 MOV R0,@#RELC ;SAVE RELOCATION CONSTANT MOV R1,@#RELC+2 .ENDC ;D$$H11 .ENDC ;M$$EXT .ENDC ;D$$H11!D$$V11 ; SETTUP THE CT VIDEO TASK TIMER CLOCK BLOCK .IF DF B$$MAP MOV #CTICK,@#$CTCB+C.SUB ;INITIALIZE CLOCK BLOCK CALL CTQUEK ;QUEUE IT .ENDC ;B$$MAP MOV #TTICK,@#$TTCB+C.SUB ;INITIALIZE CLOCK BLOCK CALL @#CLINS ;QUEUE IT MOV #$DEVHD,R0 ;GET START OF DCB LIST 40$: MOV @R0,R0 ;GET NEXT DCB CMP D.NAM(R0),#"TT ;DOES IT HAVE GENERIC NAME "TT"? BNE 40$ ;N - LOOP MOV D.UCB(R0),R1 ;GET FIRST UCB BIT #DV.TTY,U.CW1(R1) ;IS IT A TERMINAL? BEQ 40$ ;N - LOOP MOV R0,@#DCB0 ;SAVE POINTER TO FIRST TERMINAL DCB .IF DF T$$COM MOV (SP)+,R1 ;GET TTCOM PCB .IFF ;T$$COM MOV D.PCB(R0),R1 ;GET TTDRV PCB .ENDC ;T$$COM MOV P.SIZE(R1),R1 ;GET PARTITION SIZE IN 32. WORD BLOCKS .IF DF R$$EIS ASH #6,R1 ;CONVERT TO BYTES .IFF ;R$$EIS SWAB R1 ;CONVERT TO BYTES RORB R1 ROR R1 ROR R1 .ENDC ;R$$EIS .IF DF T$$SPL ADD #140000-T$$BFL,R1 ;GET POINTER T$$BFL BYTES BELOW END OF POOL .IFF ;T$$SPL ADD #120000-T$$BFL,R1 ;GET POINTER T$$BFL BYTES BELOW END OF ;DRIVER POOL .ENDC ;T$$SPL ; MOV #TTPOOL,R0 ;GET START OF POOL MOV R0,@#FREEB ;POINT TO FIRST FREE BUFFER BR CPOOL ;INITIALIZE POOL ; ; .END